package com.zw.a.basic.a06.demo13_exercise;

//扩展: 多态在实际开发中的应用.
/*
    结论: 记忆
        实际开发中, 方法的形参一般写的都是父类型, 这样可以接收其任意的子类对象,
        然后通过 多态调用成员方法的规则: 编译看左, 运行看右, 就能调用指定子类对象的方法了.
        这也是多态在实际开发中最常用的场景.
 */
public class AnimalTest02 {
    public static void main(String[] args) {
        //需求: 定义一个show()方法, 接收任意的动物类对象, 然后调用该对象的eat()方法.
        //方式一: 分解版
        //调用Cat#eat()
        Cat c = new Cat();
        show(c);            //猫吃鱼.
        System.out.println("-------------------");

        //调用Dog#eat()
        Dog d = new Dog();
        show(d);          //狗吃肉
        System.out.println("-------------------");
    }

    //方式二: 多态版
    public static void show(Animal an) {        //Animal an = new Dog();  根据多态访问成员方法的规则: 编译看左, 运行看右.
        an.eat();
    }



    //方式一: 分解版.
    /*//1. 定义方法, 接收猫类, 调用Cat#eat()
    public static void show(Cat c) {
        c.eat();
    }

    //2. 定义方法, 接收狗类, 调用Dog#eat()
    public static void show(Dog d) {
        d.eat();
    }

    //3. 定义方法, 接收鸟类.

    //4. 定义方法, 接收猴子类.*/



}
